#include "chat.h"
#include "kasm.h"





int portUsed=0;	/* puerto en uso */
unsigned char chatBuffer[MAX_BUFF_CHAT+1]={0}; /*buffer donde se guarda lo que se lee de COM1*/
int chatBufferPosition=0;


/*
 *  Funcion para escribir en la UART segun el puerto serie especificado
 */
void 
writeUART(int port, int reg, int data)
{
	portOutw(port+reg, data);	
}

/*
 * Funcion para leer datos de la UART segun el puerto serie especificado
 */
int
readUART(int port, int reg)
{
	int resp;

	resp=portInw(port +reg);
	return resp;
}

/* Funcion de seteo inicial de la UART.
 * Si el setup es exitoso retorna 1, sino el numero de COM en uso
 */
int
setupSerial(int port, int baud, unsigned char option)
{
	short divisor;
	
	portUsed=port;
	
	writeUART(port, REG_LCR, (int)DLR_ON);
	
	divisor=0x1C200/baud;
	
	
	portOutw(port, divisor);
	
	writeUART(port, REG_LCR, (int)option);
	writeUART(port, REG_MCR, (int) OUT2); 
	
	writeUART(port, REG_IER, 1);
	return 1;
}

/*
 * Funcion para mandar una palabra por puerto serie - UART
 */
void
serialWrite(unsigned char palabra)
{
	/* chequeo que este disponible */
	while(!( (unsigned char)readUART(portUsed, REG_LSR) & 0x20) );
	
	_Cli();
	
	writeUART(portUsed,REG_THR,(int) palabra);
	
	_Sti();
}

/*
 * Funcion para leer una palabra recibida por puerto serie
 */
unsigned char 
serialRead(void)
{
	/* chequeo que este disponible */
	/*while(! (unsigned char)readUART(portUsed, REG_LSR) << 7);*/
	
	return readUART(portUsed, REG_RHR);	
}

/*
 * pone una letra en el buffer del chat.
 * el '\n' marca que el buffer esta lleno.
 */
void 
putChatBuffer(unsigned char ascii)
{

	if(chatBufferPosition == MAX_BUFF_CHAT-1)
	{
		chatBuffer[chatBufferPosition]=ascii;
		chatBufferPosition++;
		chatBuffer[chatBufferPosition]='\n';
	}
	else {
		chatBuffer[chatBufferPosition] = ascii;
	}
	chatBufferPosition++;
		
	return;
	
}

